<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/jquery-3.1.0.min.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			p{
				line-height: 25px;
			}
		</style>
	</head>
	<body>
		<div class="all">
			<h1>1. 什么是WebSQL？</h1>
			<p>Web SQL是随着HTML5规范加入的在浏览器端运行的轻量级数据库</p>
			<hr />
			<h1>2. jQuery 的属性拷贝(extend)的实现原理是什么，如何实现深拷贝？</h1>
			<p>
				原理: 创建一个按钮, 让他每点击一次就创建一个自己, 并且创建出来的按钮也有这个功能(类似于递归)
			</p>
			<p>
				实现深度拷贝:<br />
				1.检测当前属性是否为对象<br />
				2.因为数组是特殊的对象，所以，在属性为对象的前提下还需要检测它是否为数组。<br />
				3.如果是数组，则创建一个[]空数组，否则，创建一个{}空对象，并赋值给子对象的当前属性。然后，递归调用extendDeep函数。
			</p>
			<p>
				<button>Clone Me</button>
			</p>
			<hr />
			<h1>3. 谈一下Jquery中的bind(),live(),delegate(),on()的区别？</h1>
			<p>.bind()是直接绑定在元素上<br />
				.live()则是通过冒泡的方式来绑定到元素上的。更适合列表类型的，绑定到document DOM节点上。和.bind()的优势是支持动态数据。<br />
				.delegate()则是更精确的小范围使用事件代理，性能优于.live()<br />
				.on()则是最新的1.9版本整合了之前的三种方式的新事件绑定机制
			</p>
			<hr />
			<h1>4. .JQuery一个对象可以同时绑定多个事件，这是如何实现的？</h1>
			<p>
				$ele.on('eventName', handle1);<br />
				$ele.on('eventName', handle2);<br />
				$ele.on('eventName', handle3);<br />
				//其实$ele元素的eventName事件有一个处理函数数组 监听一次就往里面放一个handle， 数组是先进后出型的也就是栈， 然后触发事件的时候一次执行<br />
				//上面的监听相当于<br />
				$ele.eventHandle['eventName'] = [];<br />
				$ele.eventHandle['eventName'].push(handle1);<br />
				$ele.eventHandle['eventName'].push(handle2);<br />
				$ele.eventHandle['eventName'].push(handle3);<br />
				//然后$ele.trigger('eventName')触发的时候， 从栈里面取出处理函数执行<br />
				while($ele.eventHandle['eventName'].length) {<br />
				    handle = $ele.eventHandle['eventName'].pop();<br />
				    handle();<br />
				}<br />
				//最先监听的最后执行<br />
			</p>
			<hr />
			<h1>5. 知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优点和缺点么?</h1>
			<p>
				<h3>angular JS</h3>
				<h4>优点: </h4>
				<p>
					1.功能强大, 自带angular指令(啥样的都有, 贼全, 就是有点看不懂)<br />
					2.是一个比较完善的js框架, 有好多的功能(模板, 数据双向绑定, 服务等)<br />
					3.自定义Directive(啥意思啊?), 比jQuery插件灵活<br />
					4.可以在css中通过指令写出js代码的效果, 节省代码数量, 方便使用, 不需要来回的切换<br />
					5.ng模块化的通过依赖注入写入的很多java的程序, 迭代产品时js代码改动很少<br />
				</p>
				<h4>缺点: </h4>
				<p>
					1.验证功能相对较为薄弱<br />
					2.不能与其他的插件一起使用(总崩...),对于URL运用不是特别灵活, 不能实现分页写入<br />
					3.复杂场景运用不上, 总显示冲突<br />
					4.太笨重!!!<br />
				</p>
				<h3>Backbone</h3>
				<h4>优点:</h4>
				<p>
					1.View间通过事件和Model通讯，避免了DOM事件的滥用。<br />
					2.Model和Restful的通讯方式对于后端人员非常友好<br />
					3.架构清晰<br />
					4.Collection/Model抽象了以前杂乱的AJAX请求，CRUD请求变得非常非常方便。<br />
				</p>
				<h4>缺点: </h4>
				<p>
					1.在复杂场景和数据下显得力不从心, 可能崩溃, 局限性大<br />
					2.Model不能很好的扩展, 想扩展就得从写<br />
					3.更新慢<br />
				</p>
			</p>
			<p>剩下的讲不出来, 看都看不懂, 我觉得啥都不好用......</p>
		</div>
		<script type="text/javascript">
			$("button").click(function(){
				$(this).clone(true).insertAfter(this);
			});			
		</script>
	</body>
</html>
